home *** CD-ROM | disk | FTP | other *** search
Text File | 1995-10-02 | 66.5 KB | 2,898 lines |
- Introduction 1
-
- Abs 3
-
- Action 3
-
- Adjustments 4
-
- Button 5
-
- Continue 5
-
- Copy 6
-
- Dec 7
-
- DefCaveBlk 7
-
- DefLandBlk 8
-
- DefSpookBlk 8
-
- DefWaterBlk 9
-
- DefStat 9
-
- DefPack 10
-
- Display 11
-
- DoText 13
-
- Drop 14
-
- Edit_Player 15
-
- EndGame 16
-
- Enter 16
-
- Failure 16
-
- Fight 17
-
- Fighting 17
-
- Find 18
-
- For 19
-
- Foreach 20
-
- Frame 21
-
- GetAction 22
-
- GetNum 23
-
- GetStr 24
-
- Goto 25
-
- Gosub 26
-
- If 27
-
- Inc 28
-
- Join 28
-
- Leave 29
-
- LoadHint 29
-
- LoadText 30
-
- Locate 30
-
- Min, Max 31
-
- Move 32
-
- Music 33
-
- On x Goto, On x Gosub 34
-
- Paint 35
-
- Pause 35
-
- Random 36
-
- ReadText 37
-
- Restart 38
-
- Restore 39
-
- Return 39
-
- Save 40
-
- SavePCX 40
-
- Select 41
-
- SetBody 43
-
- SetBp 44
-
- Sgn 45
-
- SOUND 45
-
- Stats 46
-
- Stop 47
-
- Success 47
-
- System 48
-
- Teleport 49
-
- Vanish 50
-
- Version 51
-
- ViewFLI 52
-
- ViewPCX 53
-
- Voice 54
-
- VPlay 55
-
- Wait 55
-
- While 56
-
- Write[ln] 57
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- D C - G A M E S
-
-
-
-
-
- Version 4.0
-
-
-
-
-
-
-
- SCRIPT LANGUAGE REFERENCE GUIDE
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- (c) DC Software, 1989-1995
-
- 7908 Kettlewood Court
-
- Plano Tx 75025
-
- (214) 491-1579Introduction
-
- Purpose
-
- This manual presents all of the language commands and functions
- in alphabetical order and using a consistent presentation for
- all of them. It is not intended to teach you how to write a
- script, but rather to describe in detail each and every command
- and function in the language.
-
- The Script Language User's Guide is a more general document that
- tries to teach you how to write scripts. That manual talks
- about the different types of scripts, the reasons for writing
- them, etc. The examples in it include many different commands,
- since they try to show how to do something rather than teach you
- how many different things you can do with a single command.
-
- The best way to use these manuals is to read the User's Guide
- from begining to end, and consult the Reference Guide only when
- you want to know more about a particular command or function.
-
- If you are comfortable with programming languages, you can
- probably read this manual from side to side and end up knowing a
- lot about the script language itself, but you will not find out
- here the how, when or why of writing scripts.
-
- Sincerely,
-
-
-
- David A. HernandezAbs
-
- Syntax ret-val = abs( expr );
-
- Purpose Returns the absolute value of the numeric expression.
-
- Parameters expr
-
- Is an arithmetic expression.
-
- Returns The absolute value (positive number) of the expression.
-
- Remarks The absolute value of a number is the same number, but
- always with a positive sign. Thus, abs(-2) and abs(2) are both
- 2.
-
- Example ! Check to see if there is a great disparity between the
- character's
-
- ! experience and the npc's experience.
-
- if abs( player.exp - npc.exp ) > 3 then
-
- writeln( "Perhaps another time.." );
-
- else
-
- join; ! NPC joins the party..
-
- endif;
-
- See Also min, max, sign
-
- Action
-
- Syntax ret-val = action;
-
- Purpose Find out what action invoked the script.
-
- Returns The numeric action code which is actually the number of
- the entry point at which execution of the script will begin.
- See Entry Points in the User's Guide for more information on
- these values.
-
- Example ! The following code handles both LOOK and EXAMINE, but
- EXAMINE
-
- ! prints more detail than LOOK.
-
- :LOOKING
-
- writeln("You see a ", object.name, ". Type ", object.type );
-
- if action = EXAMINE then
-
- writeln( ", Class ", object.class, ", Weight: ", object.weight
- );
-
- endif;
-
- ...
-
- Adjustments
-
- Syntax ret-val = adjustments( expr1, ... );
-
- Purpose Compute the adjustments to character attributes
- indicated by the given set of values.
-
- Parameters expr1, ...
-
- Is one or more expressions separated by comma that result each
- in a number between 0 and 255.
-
- Returns The sum of the adjustments computed for each value
- independently.
-
- Remarks The adjustment is computed using the values in the
- [ATTRIBUTE MODIFIERS] section of the DCCTOKEN.DAT file. The
- default values are:
-
- Value Range Effect
-
- 0 8 Decrease by -1 point
-
- 9 15 No change
-
- 16 18 Increase by 1 point
-
- 19 20 Increase by 2 points
-
- 21 30 Increase by 3 points
-
- 31 40 Increase by 4 points (and so on..)
-
-
-
- During regular game play, a character's class determines such
- factors as the weight it can carry, the type of weapons and/or
- armor it can use, it's ability to strike moving targets, etc.
-
- In addition to the character class, it's standard attributes
- (such as strength, aim, dexterity, iq, etc.) may increase or
- decrease these factors. For example, the stronger a character
- is, the more weight it can carry.
-
- Example ! An ELF has a 1 in 4 chance to detect a trap, adjusted
- by it's dexterity and
-
- ! intelligence. All others have a 1 in 2 chance adjusted by
- dexterity.
-
- if player.type = ELF then
-
- L28 = 4 + adjustments( player.dex, player.iq );
-
- else
-
- L28 = 2 + adjustments( player.dex );
-
- endif;
-
- if random(L28) = 0 then ... trap activated ... else ... trap
- found ... endif;
-
- Button
-
- Syntax retval = button;
-
- Purpose Find out which mouse button was pressed.
-
- Remarks When a mouse event is sent to the CONTROL script, the
- button function tells you which button was pressed. 1 = Right
- Button, 2 = Left Button, 3 = Middle Button.
-
- See Also keypress, pointx, pointy
-
- Continue
-
- Syntax continue;
-
- Purpose Terminate execution of the current script.
-
- Remarks This command informs the game driver that while the
- script has performed some actions, the DEFAULT action should
- still be taken, if any.
-
- Warning Because the OBJECT script contains the default action
- for objects, that script should never end with a continue.
- Doing so would indicate that default action is needed, which may
- result in the object script being run twice for the same action.
-
- See Also stop, fight
-
- Copy
-
- Syntax copy( source, destination [, count] );
-
- Purpose To create a copy of an object and place it in a given
- location.
-
- Parameters source
-
- The copy command can copy an object from curritem, object,
- group.vehicle, npc.bp, npc.body, npc.weapon, npc.armor,
- npc.shield, npc.ring, npc.amulet, npc.staff, player.bp,
- player.body, player.weapon, player.armor, player.shield,
- player.ring, player.amulet and player.staff.
-
- destination
-
- The destination can be any of the above, except for the generic
- locations curritem and object.
-
- count
-
- This is the number of copies of the object that are placed at
- the destination. It is an expression that results in a value
- between 1 and 255. If omited, the default is the number of
- copies in the source.
-
- Remarks The destination must be appropriate to the type of
- object, for example, you can't move an object of type amulet to
- player.shield.
-
- When an object is copied or moved to the generic destination
- .body, it will be placed in the correct body section according
- to the object's type.
-
- When the count is greater than one, copies are moved one by
- one. The character's load is checked before each move to verify
- that the character can carry the object. If the character's
- maximum load is reached before all objects have been copied, the
- failure variable is set to the actual number of copies moved.
-
- Examples ! Copy 5 instances of an object from npc.bp to player.bp
-
- copy( npc.bp, player.bp, 5 );
-
- if failure then
-
- L6 = failure;
-
- writeln( player.name, " could only carry ", L6 );
-
- drop( npc.bp, - L6 ); ! Place the rest on the floor.. !
-
- endif;
-
- See Also move, failure, drop
-
- Dec
-
- Syntax dec( variable [, expr] )
-
- Parameters variable is any numeric variable or attribute that
- can be modified from within a script.
-
- expr
-
- is an optional expression that results in a number that will be
- substracted from the variable. If omited, the default is 1.
-
- Remarks The decrement command will substract the amount
- indicated (1 if none is given) from the variable or attribute
- specified. If the expression is negative, then the double
- substraction results in an addition.
-
- Example ! An NPC strikes the player
-
- dec( player.hp, npc.weapon.damage );
-
- DefCaveBlk
-
- Syntax ret-val = DefCaveBlk( which );
-
- Purpose Returns a graphics block number for cave and dungeon
- monsters. (Class CAVE_MONSTER)
-
- Parameters which
-
- Identifies which of the five graphics blocks for random monsters
- you want. The value must be between 0 and 4, with 0 being the
- smallest monster and 4 being the toughest.
-
- Returns ret-val
-
- Is a graphics block record number (between 0 and 255) to be used
- for random monsters that are found in caves or dungeons.
-
- Remarks The DCWORLD parameter configuration screen is used to
- set the graphics blocks that will be used to generate random
- monsters.
-
- See Also DefLandBlk, DefWaterBlk, DefSpookBlk, DefStat, DefPack
-
- DefLandBlk
-
- Syntax ret-val = DefLandBlk( which );
-
- Purpose Returns a graphics block number for outdoor, land based
- monsters. (Class LAND_MONSTER).
-
- Parameters which
-
- Identifies which of the five graphics blocks for random monsters
- you want. The value must be between 0 and 4, with 0 being the
- smallest monster and 4 being the toughest.
-
- Returns ret-val
-
- Is a graphics block record number (between 0 and 255) to be used
- for random monsters that are land based.
-
- Remarks The DCWORLD parameter configuration screen is used to
- set the graphics blocks that will be used to generate random
- monsters.
-
- See Also DefCaveBlk, DefWaterBlk, DefSpookBlk, DefStat, DefPack
-
- DefSpookBlk
-
- Syntax ret-val = DefSpookBlk( which );
-
- Purpose Returns a graphics block number for monsters that you
- might find in places like hounted houses or cementeries (Class
- SPOOK_MONSTER).
-
- Parameters which
-
- Identifies which of the five graphics blocks for random monsters
- you want. The value must be between 0 and 4, with 0 being the
- smallest monster and 4 being the toughest.
-
- Returns ret-val
-
- Is a graphics block record number (between 0 and 255) to be used
- for random monsters of this type..
-
- Remarks The DCWORLD parameter configuration screen is used to
- set the graphics blocks that will be used to generate random
- monsters.
-
- See Also DefLandBlk, DefCaveBlk, DefWaterBlk, DefStat, DefPack
-
- DefWaterBlk
-
- Syntax ret-val = DefWaterBlk( which );
-
- Purpose Returns a graphics block number for aquatic monsters
- (monsters that swim, class WATER_MONSTER).
-
- Parameters which
-
- Identifies which of the five graphics blocks for random monsters
- you want. The value must be between 0 and 4, with 0 being the
- smallest monster and 3 being the toughest. Number 4 is used to
- represent a Pirate's Ship, which requires special handling to
- make sure a pirate's ship doesn't appear on a small pond of
- water in the middle of town!
-
- Returns ret-val
-
- Is a graphics block record number (between 0 and 255) to be used
- for random monsters that are land based.
-
- Remarks The DCWORLD parameter configuration screen is used to
- set the graphics blocks that will be used to generate random
- monsters.
-
- See Also DefLandBlk, DefCaveBlk, DefSpookBlk, DefStat, DefPack
-
- DefStat
-
- Syntax ret-val = DefStat( which );
-
- Purpose Returns an index into the statistics file (PLAYER.DTA)
- which holds the statistics that will be used for small, medium,
- large and pirate monsters.
-
- Parameters which
-
- Is the size of the character you are creating. 0=Small,
- 1=Medium and 2=Large, 3=Pirates.
-
- Returns ret-val
-
- Is the statistics record number (npc.stats) which holds the
- generic statistics for the size of character you indicated.
-
- Remarks The DCWORLD parameter configuration screen is used to
- set the 4 values that will be used as statistics records for
- random monsters.
-
- See Also DefLandBlk, DefCaveBlk, DefSpookBlk, DefPack
-
- DefPack
-
- Syntax ret-val = DefPack( which );
-
- Purpose Returns an index into the statistics file (PLAYER.DTA)
- which holds the statistics record whose backpack contains the
- items that will be used to generate random treasure.
-
- Parameters which
-
- Is which of the 3 backpacks should be used (0, 1 or 2).
-
- Returns ret-val
-
- Is the statistics record number (npc.stats) whose backpack
- contains items to be used for random treasure.
-
- Remarks The DCWORLD parameter configuration screen is used to
- select the statistics records to be used. The statistics screen
- is used to modify the records themselves. The default records
- contain Potions, Rings & Amulets, and Magic Staffs respectively.
-
- See Also DefLandBlk, DefCaveBlk, DefSpookBlk, DefStat
-
-
-
- Display
-
- Syntax display ( group );1
-
- display [$[2]] ( {player|npc} [, {matching|type}] );2
-
- display [$[2]] ( {player.body|npc.body} );3
-
- display [$] ( string [, value] [, string ... ] );4
-
- Purpose Display a list of characters, items, etc, on the menu
- area.
-
- Parameters group, player, npc, player.body and npc.body
-
- Identify what you want to display in the menu area.
-
- matching
-
- Used to indicate that only items that match the items of the
- type carried by the current npc should be displayed. (Used by
- merchants)
-
- type
-
- is a number between 0 and 255 (tokens may be used).
-
- string
-
- is a text string enclosed in quotes.
-
- value
-
- is either a number (constant or token) or a single variable or
- attribute whose value is numeric. No arithmetic expressions are
- permited.
-
- Remarks The display command is a powerful tool to display a list
- of values in the menu area of the screen. If a $ is specified,
- then values will be displayed as gold or silver pieces (1gp =
- 10sp). The 2 following the $
-
- indicates that the values should be divided by 2 before being
- displayed.
-
-
-
- 1) Displays the current members of the playing party
-
- 2) Displays the contents of a character's backpack. If matching
- is specified, it indicates that only items that match the types
- of items in the current npc's backpack should be displayed. If
- type is provided, only items of the specified type are displayed.
-
- 3) Displays the set of items being worn by a character (weapon,
- armor, shield, amulet, ring and staff).
-
- 4) Displays a list of strings with or without values associated
- with it.
-
- Examples ! Display the current members
-
- display( group );
-
-
-
- ! Display the current player's inventory
-
- display( player );
-
-
-
- ! Display a merchant's inventory (with prices)
-
- display$( npc );
-
-
-
- ! Display the player's items that the merchant might want to
- buy..
-
- display$2( player, matching );
-
-
-
- ! Display a list of items and a price (numbers in silver pieces)
-
- display$( "Magic Ring", 300, "Short Sword", 150, "Banana", 1 );
-
-
-
- ! Display a list with numbers (not $)
-
- display( "Age", 27, "Strength", npc.str, "Max Weight",
- npc.mload);
-
- See Also select
-
- DoText
-
- Syntax ret-val = dotext( str-val );
-
- Purpose To perform keyword analysis compatible with pervious
- prior versions of the DCGAMES system.
-
- Parameters str-val
-
- Is either a word surrounded by double quotes (string constant),
- or the string variable S0.
-
- Returns ret-val
-
- Returns the index of the keyword in the text record (1-16) if
- found, 0 if not found.
-
- Remarks This compares the keyword str-val against the first 8
- characters of the string variables S1 through S16. If a match
- is found, then the text found in the variable that had the
- matching keyword (minus the keyword) is displayed on the screen
- and the number (1-16) of the string that had the match is
- returned. Otherwise, a 0 is returned and no message is
- displayed.
-
- If a SoundBlaster card is present, and the current character or
- object being processed has a voice file associated with it
- (voice attribute), then the voice file (VOICE###.VFL, where ###
- is the value of the voice attribute), is searched for the same
- keyword, and if present, the corresponding recorded voice is
- played.
-
- If the voice file is not present or the keyword is not found in
- the voice file, but the SBTALKER text-to-speach translator is
- present (memory resident), then the text that followed the
- keyword will be spoken in addition to being displayed.
-
- Example ! Talk to the player..
-
- :TALKHERE
-
- L9 = getstr( "Hello", "King", "Queen", "Treasure", "Key", "Door"
- );
-
- if NOT dotext( s0 ) then ! The text record didn't handle the
- keyword..
-
- on L9 gosub XHELLO, XKING, XQUEEN, XGOLD, XKEY, XDOOR;
-
- endif;
-
- if S0 <> "Bye" goto TALKHERE;
-
- stop;
-
- See Also voice, vplay, write, writeln
-
- Drop
-
- Syntax drop( item [, howmany [, x [, y]]] );
-
- Purpose Get rid of an item that a character is carrying or
- riding.
-
- Parameters item
-
- Is the item to be dropped, which must be one of: group.vehicle,
- curritem, player.bp, player.body, player.weapon, player.armor,
- player.shield, player.ring, player.amulet, player.staff, npc.bp,
- npc.body, etc.
-
- howmany
-
- Is the number of items to be dropped. 0 means all. A negative
- means that the objects are not to be removed, but rather
- duplicated. The default value is 1.
-
- x, y
-
- Is the location in the world where the object will be placed.
- The default values are the current player's location.
-
- Remarks The item will be added to the world's list of objects
- with a count attribute as indicated by the howmany parameter.
-
- If the howmany parameter is 0, the current count attribute of
- the item being dropped is used.
-
- If the howmany parameter is negative, it indicates that a copy
- should be made of the items. The originals are left intact.
-
- If the absolute value of the howmany parameter is greater than
- the count attribute of the item, then howmany is used. (i.e.,
- you end up with more copies than you had!).
-
- Examples ! The following are all equivalent
-
- drop( curritem ); ! If the current item is the current backpack
- item
-
- drop( player.bp );
-
- drop( player.bp, 1 );
-
- drop( player.bp, 1, player.x, player.y );
-
-
-
- ! If the npc has a weapon, drop it one square to the right of
- the player
-
- if npc.weapon.count then
-
- drop( npc.weapon, npc.count, player.x+1, player.y );
-
- endif;
-
- Edit_Player
-
- Syntax edit_player( which [, points, min, max, [flags, ...]] );
-
- Purpose Allow access to the player editing screen from the
- scripts.
-
- Parameters which
-
- Indicates which party member is to be edited. The value is in
- the range 1 to 6.
-
- points
-
- You may specify the number of points that the player may
- allocate to the different attributes. Default is 25.
-
- min
-
- The player may not set any attribute below this threshold.
- Default 9.
-
- max
-
- The player may not set any attribute above this threshold.
- Default 20.
-
- flags
-
- Edit flags. A 1 allows editing of that field, a 0 does not.
- Default is 1. The list of flags is shown in the example.
-
- Remarks Usually called from the INITGAME script during game
- initialization to allow the player to configure his/her
- character. See that script for an extended example.
-
- Example ! Allow player to customize his character within the
- limits:
-
- setplayer(1);
-
- player.class = ELF; ! Fixed class
-
- player.mstr = 12; ! Fix Strength
-
- edit_player( 1, ! Main Character
-
- 25, ! Distribute 30 points
-
- 8, ! Don't allow a value lower than 8
-
- 25, ! Don;t allow a value higher than 25
-
- 1, ! Allow edit "NAME"
-
- 0, ! Don't allow edit of character class
-
- 1, ! Allow player to select a tile (graphics block)
-
- 0 ! Don't allow edit of the first attribute (Strength)
-
- ); ! Allow edit of all other attributes
-
-
-
- EndGame
-
- Syntax endgame;
-
- Purpose Terminate the game. You have either won or lost, but
- you cannot continue.
-
- Remarks The game displays the copyright screen and returns the
- user to DOS. The assumption is that an appropriate ending
- scenario has been executed by the script.
-
- Enter
-
- Syntax enter( door# );
-
- Purpose Send the playing party through a specific door, wherever
- it might lead.
-
- Parameters door#
-
- A numeric expression that indicates which door should in the
- current world you want to take.
-
- Remarks The transfer through the door does not take place until
- after the script ends execution. You still need to use the stop
- or continue option to end the script.
-
- Failure
-
- Syntax ret-val = failure;
-
- Purpose To find out if the last major operation failed.
-
- Returns ret-val
-
- The returns will be non-zero (TRUE) if the last major operation
- failed to complete successfuly.
-
- Example ! A merchant sells an item to a player..
-
- writeln( "Here is your ", npc.bp.name );
-
- copy( npc.bp, player.bp );
-
- if failure then
-
- writeln( "The ", npc.bp.name, " is placed on the floor.." );
-
- drop( npc.bp );
-
- endif;
-
- See Also success
-
- Fight
-
- Syntax fight;
-
- Purpose Go into fighting mode against the currently selected npc
- character.
-
- Remarks The type of the npc does not have to be HOSTILE. The
- fight may be against any character of any type.
-
- The script is immediatly ended and the fight starts right away.
- No stop or continue command is needed.
-
- Warning Do not use fight after you have done enter. The fight
- takes place before the transfer is made, but the scripts that
- execute during and immediately after the fight may get confused.
- The desired behaviour for this situation is yet to be
- determined..
-
- See Also fighting
-
- Fighting
-
- Syntax ret-val = fighting;
-
- Purpose To find out if the script is executing during a fight.
-
- Returns ret-val
-
- A non-zero value (TRUE) is returned when a fight is taking place.
-
- Remarks Your script may behave differently depending on whether
- you are in a fight or not. For example, certain spells may not
- work during a fight.
-
- During a fight, the party and the npc are separated into their
- respective individuals, and all other characters are removed
- from the screen.
-
- The party may not leave the area during a fight, but pressing
- the ESC key will exit fighting mode and allow the party to
- attempt to out-run the enemy.
-
- See Also fight
-
- Find
-
- Syntax retval = find( where [, what [, type]] );
-
- Purpose Find an object or character.
-
- Parameters where
-
- Identifies where you want to search for the object. It can be
- one of group, object, npc, player, npc.bp, player.bp, npc.body
- or player.body.
-
- what
-
- Is the name of the item or person you are looking for. It must
- either be a string constant ("like this") or a string attribute
- of a character or object.
-
- type
-
- If present, it indicates that the item must not only have the
- given name, but must also have the given type attribute. The
- value is either a numeric constant, a numeric token or the type
- attribute of a character or object.
-
- Returns The index attribute of the item (starts with 0), or
- negative if the item was not found.
-
- Remarks When group is searched, what is a character name, and
- success indicates that the character is a member of the group.
-
- When object is searched, the current world is searched for an
- object with the given name (and type, if given).
-
- When npc is searched, the current world is searched for an
- object with the given name (and type, if given).
-
- When player is given, the backpacks of every player in the
- current group is searched for the given object. The value
- returned is the index of the player carrying the object, not the
- index of the object in the backpack.
-
- When npc.bp or player.bp is specified, the backpack of the
- character is searched for the given object.
-
- When npc.body or player.body is specified, the items currently
- worn by the character are searched (weapon, armor, shield, ring,
- amulet and staff).
-
- For
-
- Syntax for localvar = expr1 to expr2 [by value] do statements;
- endfor;
-
- Purpose Execute a set of statements a given number of times.
-
- Parameters localvar
-
- Is a local variable which will be used to hold the loop's
- current value.
-
- expr1
-
- Is the initial value that will be assigned to the local variable.
-
- expr2
-
- Is an expression against which the local variable is compared to
- determine if the statements should be executed or if the loop
- has ended.
-
- value
-
- Is a numeric constant (may be negative) which is added to the
- local variable at the end of every iteration (after the
- statements are executed).
-
- Remarks Expr1 is evaluated once, at the begining of the loop,
- but expr2 is evaluated every time after the value has been added
- to localvar. The statements between the do and endfor keywords
- will be executed again and again until local variable's value
- becomes greater (or less if the value is negative) than expr2.
-
- Examples ! Search the npc's backpack for an object (could use
- find instead!).
-
- for L0 = 0 to 15 do
-
- setbp( npc, L0 );
-
- if npc.bp.count > 0 and npc.bp.name = "The Thing" then
-
- writeln( "I found it!" );
-
- endif;
-
- endfor;
-
- if L0 = 16 then writeln( "Didn't find it!" ); endif;
-
- See Also foreach, find
-
-
-
- Foreach
-
- Syntax foreach item do statements; endfor;
-
- Purpose Allow you to process all players, npcs or objects, in
- order.
-
- Parameters item
-
- Is one of player, npc or object.
-
- Remarks If the item is player, then the player variable will be
- set to each of the members of the group, consecutively.
-
- If the item is npc, then the npc variable will be set to every
- character in the current world, consecutively. Warning: when you
- are fighting, the list of npcs refers to the monsters you are
- fighting. Other npcs are not available.
-
- If the item is object, then the object variable will be set to
- each of the objects in the current world, consecutively.
-
- Examples ! Drop the weapons carried by every member of the group
-
- foreach player do
-
- if player.weapon.count then
-
- drop( player.weapon );
-
- endif;
-
- endif;
-
- ! Check to see if there is a character named 'Morris' in this
- world.
-
- ! (Could have used the find command)
-
- foreach npc do
-
- if npc.name = "Morris" then
-
- writeln( "Found Him!" );
-
- endif;
-
- endfor;
-
- ! Find out if there is any object at a specific location in the
- world
-
- foreach object do
-
- if object.x = 30 and object.y = 23 then
-
- writeln("Object ", object.name, " is on the hot spot.."
- );
-
- endif;
-
- endfor;
-
- Frame
-
- Syntax frame( x, y, block# );
-
- Purpose Display a system graphics block over the current
- graphics block at the x and y location within the current world.
-
- Parameters x
-
- Is the horizontal position for the frame. May be an expression.
-
- y
-
- Is the vertical position for the frame. May be an expression.
-
- block#
-
- Is the graphics block record number from the system graphics
- file which contains the frame you wish to display.
-
- Remarks If the x, y position is not on the screen, the frame is
- not shown.
-
- The frame is X-ORed (over-imposed) on top of the graphics at
- the given location. To remove the frame, you re-display the
- frame at the same location.
-
- Example ! Draw a SPLAT type frame on top of the group to
- indicate they have
-
- ! been hit by something (i.e. the members suffered some damage)
-
- frame( group.x, group.y, SYS_SPLAT );
-
- wait(1);
-
- frame( group.x, group.y, SYS_SPLAT );
-
- ! Draw a bullet being shot from the current player to an npc.
-
- ! (This algorithm doesn't really work very well. It is just an
- example)
-
- if player.x < npc.x then L0 = 1; else L0 = -1; endif;
-
- if player.y < npc.y then L1 = 1; else L1 = -1; endif;
-
- for L3 = player.x to npc.x by L0 do
-
- for L4 = player.y to npc.y by L1 do
-
- frame( L3, L4, SYS_BULLET );
-
- wait(1);
-
- frame(L3, L4, SYS_BULLET );
-
- endfor;
-
- endfor;
-
- GetAction
-
- Syntax retval = getaction;
-
- Purpose Allows the player to point with the mouse cursor and
- click at something, or to type a character on the keyboard.
-
- Returns retval
-
- Contains the value of the key pressed or mouse event. In the
- control script, the keypress variable contains the current
- action, so see that script to figure out how to interpret the
- retval information.
-
- See Also keypress, pointx, pointy, button
-
- GetNum
-
- Syntax retval = getnum( string [, low [, high] ] );
-
- Purpose This function displays a message and asks the user to
- enter a numeric value between low and high inclusive. The value
- that the user types is returned as the function's value.
-
- Parameters string
-
- Is a string to be displayed in the text area of the game screen,
- before the user is asked to enter a number.
-
- low
-
- Is the minimum allowed value. It may be an expression. The
- default is 0.
-
- high
-
- Is the maximum allowed value. It may be an expression. The
- default value is 32767.
-
- Returns This function returns a number between low and high as
- typed by the game player, or -1 if the game player pressed the
- ESCape key.
-
- Remarks The low value is returned if you press the ENTER key.
-
- The value -1 is returned if you press the ESC (escape) key.
-
- Example ! Drop some (or all) of a certain object
-
- L6 = getnum( "Drop how many", 0, player.bp.count );
-
- if L6 > 0 then
-
- drop( player.bp.count, L6 );
-
- endif;
-
-
-
- GetStr
-
- Syntax retval = getstr( "string" ,... );
-
- Purpose Asks the user to type in something (a word), then
- compares the keyword entered with the list of strings and
- returns the numeric index of the string that matches (if any).
-
- Parameters "string ",...
-
- Is a list of up to 255 keywords.
-
- Returns The getstr command will compare the keyword typed by the
- player to the list of words provided as parameters and return
- the position of the word in the list (if found).
-
- Remarks You can list up to 255 strings may be listed.
-
- Only the first 8 characters of the string are compared.
-
- The comparison is case insensitive (i.e. "Hello" is equal to
- "HELLO").
-
- If you press the ESCape key, the value returned is -1.
-
- If the word is not found, the value returned is -2 and the word
- is left in the string variable s0.
-
- Examples ! Everyone died, so...
-
- writeln( "What do you want to do (Restore, Restart, Quit)" );
-
- L3 = getstr( "Restore", "Restart", "Quit");
-
- on L3 goto :my_restore, :my_restart, :my_quit;
-
- if L3 = -2 then writeln( "I don't know what you mean by ", s0 );
-
- stop;
-
- :my_quit
-
- endgame;
-
- :my_restore
-
- ...
-
- :my_restart
-
- ...
-
- See Also select, on x goto
-
- Goto
-
- Syntax goto LABEL;
-
- Purpose Within the script, transfer the execution to the
- indicated label.
-
- Remarks The LABEL must be defined elsewhere in the script as
- follows
-
- :LABEL
-
- Execution of the script continues on the first statement after
- the indicated label.
-
- Example ! Transfer execution
-
- goto SKIP;
-
- writeln( "You should NOT see this line" );
-
- :SKIP
-
- writeln( "You should see this one instead" );
-
- See Also on x goto, if expr goto, gosub, on x gosub and if expr
- gosub
-
- Gosub
-
- Syntax gosub LABEL;
-
- Purpose Within the script, transfer the execution to the
- indicated label.
-
- Remarks The LABEL must be defined elsewhere in the script as
- follows
-
- :LABEL
-
- Execution of the script continues on the first statement after
- the indicated label.
-
- When the return statement is found, execution returns to the
- first statement after the gosub statement.
-
- This statement is used to perform a series of statements at
- many different points within the same script.
-
- Example ! Transfer execution
-
- gosub SKIP;
-
- writeln( "You should see this message SECOND" );
-
- stop;
-
-
-
- :SKIP
-
- writeln( "You should see this message FIRST!" );
-
- return;
-
- writeln( "You should NOT see this message at all" );
-
- See Also return, on x gosub and if expr gosub
-
- If
-
- Syntax if expr1 then statements1;
-
- [elsif expr2 then statements2; ...]
-
- [else statements3;]
-
- endif;
-
- or
-
- if expr1 goto label;
-
- or
-
- if expr1 gosub label;
-
- Purpose Execute a group of statements only if the expresion expr
- is true.
-
- Parameters expr1, expr2, ...
-
- These are logical expressions which evaluate to a True or False
- value. True is any non-zero value. False is zero.
-
- statements1, statements2, ...
-
- These are the statements to be executed the related expression
- is true.
-
- statments3
-
- These are the statements to be executed if NONE of the given
- expressions are true (i.e. they are all false).
-
- Remarks In the second and third form, the goto or gosub are
- executed only if the expression expr1 evaluates to a non-zero
- value.
-
- Examples ! Drop the current player's weapon
-
- if player.weapon.count > 0 then
-
- drop( player.weapon );
-
- else
-
- writeln( "You are not wielding a weapon" );
-
- endif;
-
- Inc
-
- Syntax inc( variable [, expr] )
-
- Parameters variable is any numeric variable or attribute that
- can be modified from within a script.
-
- expr
-
- is an optional expression that results in a number that will be
- added to the variable. If omited, the default is 1.
-
- Remarks The increment command will add the amount indicated (1
- if none is given) to the variable or attribute specified. If
- the expression is negative, the effect will be to decrement the
- value.
-
- Example ! An player drinked some healing potion, so restore some
- points..
-
- inc( player.hp, curritem.units );
-
- Join
-
- Syntax join;
-
- Purpose Cause the npc character to join the current party.
-
- Remarks The current npc is removed from the world in which it
- exists and added to the player's party.
-
- The npc variable is cleared (i.e. no npc is selected any
- longer).
-
- The party can hold a maximum of 6 players. If the party is
- full, the npc will NOT join the party.
-
- Leave
-
- Syntax leave( whom );
-
- Purpose Cause a player to leave the party.
-
- Remarks The player with index whom in the group will leave the
- party.
-
- Note that the main player (index 0 is not allowed to leave the
- party.
-
- Note also that the player's script is NOT invoked to give it a
- chance to refuse to leave. This is in contrast to the game
- driver's V)acate command (player pressed letter V), which
- invokes the player's script, and if the script either does not
- handle the action, or terminates with continue, then invokes the
- CONTROL script which in turn executes the a leave command.
-
- Example ! When the party enters the King's Castle, if the king
- is a member of the
-
- ! party it means that the King has been rescued and now should
- leave the
-
- ! party and go sit with the queen..
-
- if world.name = "King's Castle" then
-
- L0 = find( group, "The King" );
-
- if L0 > 0 then ! Found the
- king
-
- writeln( "The king leaves you and heads for the throne
- room.." );
-
- L1 = find( npc, "The Queen" ); ! Find out where the
- Queen is
-
- npc.index = L1; ! Select her as
- current npc.
-
- leave( L0, npc.x+1, npc.y ); ! Place the king next
- to the queen.
-
- endif;
-
- endif;
-
- LoadHint
-
- Syntax loadhint;
-
- Purpose Load a one-line 'hint' from the hint file (HINT.DTA).
-
- Remarks Hints are placed in the HINT.DTA file using the DCWORLD
- game builder.
-
- The hint is selected at random and placed in variable S0.
-
- Example ! Display a hint
-
- loadhint;
-
- writeln( "The beggar gives you a hint:", S0 );
-
- LoadText
-
- Syntax loadtext( text-record-# );
-
- Purpose To load a text record (16 lines of text) from the
- TEXT.DTA file into the 16 string variables S1 through S16.
-
- Remarks The text-record-# is an expression that evaluates to a
- number between 0 and the number of text records in the TEXT.DTA
- file (minus one).
-
- The given record is loaded into the S1 through S16 (not S0).
-
- See Also dotext
-
- Locate
-
- Syntax ret-val = locate [ ( object | npc [, x, y ] ) ] ;
-
- Purpose If no X,Y is given, the player is asked to point on the
- screen using the keyboard or the mouse. If an object or npc is
- found at that location, it becomes the current object or npc
- respectively.
-
- Returns ret-val
-
- The distance from the object or npc found (largest of x or y
- distance).
-
- Remarks If the first parameter is omited, the player is allowed
- to point to either an object or a character. If it is given,
- then the player must point to an object or an npc depending on
- the parameter that was specified.
-
- When you specify the X/Y location, that location is verified
- immediatly, and the user is NOT asked to point at all. See the
- code in the CONTROL script for handling movement and checking
- for guards!.
-
- Examples ! Attack someone
-
- writeln( "Attack who?" );
-
- L2 = locate(npc);
-
- if L2 < 0 then stop; ! No one
-
- if L2 > 2 then writeln( "You must get closer.." );
-
- ! goto attack_code;
-
- ! Check before you move to the right..
-
- if locate(npc,player.x + 1, player.y) then
-
- writeln( "Can't go there!" );..
-
- Min, Max
-
- Syntax ret-val = min( expr [, expr ...] ); or
-
- ret-val = max( expr [, expr ...] );
-
- Purpose To obtain the smallest (or largest) of a set of values.
-
- Parameters expr
-
- Two or more arithmetic expressions separated by commas. A
- maximum of 255 expressions are allowed.
-
- Examples ! Look for the object with the highest weight in the
- player's backpack
-
- L0 = -1;
-
- foreach player.bp do
-
- L0 = max( L0, player.bp.weight );
-
- endfor;
-
- if L0 > 0 then
-
- writeln( "The heavyest object has a weight of ", L0, "lbs" );
-
- endif;
-
- Move
-
- Syntax move( source, destination [, count] );
-
- Purpose To create a copy of an object and place it in a given
- location.
-
- Parameters source
-
- The move command can move an object from curritem, object,
- group.vehicle, npc.bp, npc.body, npc.weapon, npc.armor,
- npc.shield, npc.ring, npc.amulet, npc.staff, player.bp,
- player.body, player.weapon, player.armor, player.shield,
- player.ring, player.amulet and player.staff.
-
- destination
-
- The destination can be any of the above, except for the generic
- locations curritem and object.
-
- count
-
- This is the number of copies of the object to be moved. It must
- be a value between 1 and the actual number of copies (.count
- attribute).
-
- Remarks The destination must be appropriate to the type of
- object, for example, you can't move an object of type amulet to
- player.shield.
-
- When an object is copied or moved to the generic destination
- .body, it will be placed in the correct body section according
- to the object's type.
-
- If there is no space to put the object in the destination, the
- operation fails, and the number of objects that were actually
- moved is stored in the failure variable.
-
- The backpack can hold 16 items. Each body part can hold only
- one item.
-
- See Also copy, drop, vanish, failure
-
- Music
-
- Syntax music( filename | stop );
-
- Purpose Starts playing a CMF music
-
- Parameters filename
-
- The name of the music file. May include a DOS path and be up to
- 64 chars in length.
-
- stop
-
- If you use the stop keyword instead of a file name, any music
- currently playing is stopped.
-
- Remarks The filename must be a string constant (surrounded by
- double quotes).
-
- You must have a Sound Blaster compatible card to play music. If
- none is present the command is ignored.
-
- Examples ! Play some music and wait until either the music ends,
-
- ! the player presses a key or 2 minutes have elapsed.
-
- music( "Intro.cmf" );
-
- wait( 180 );
-
- ! Play some music in the background, display a picture and then
-
- ! Wait for 2 minutes or until the player presses a key, even if
- the
-
- ! music ends.
-
- music( "c:/game/sound/mymusic.cmf");
-
- pause( 180 );
-
- ! Play some music while talking to a character..
-
- music( "healer.cmf" );
-
- ... do stuff here ...
-
- :XSTOP
-
- writeln( "Y'all come back, now!" );
-
- music( stop );
-
- stop;
-
- See Also wait, pause
-
- On x Goto, On x Gosub
-
- Syntax on expr {goto|gosub} label0, label1, label2, ... labeln;
-
- Purpose To support the transfer of control to one of a set of
- labels depending on the value of an expression.
-
- Parameters expr
-
- This expression evaluates to a number between 0 and n.
-
- label0, label1, ..
-
- These are the labels that have been declared elsewhere in the
- script to receive control of execution.
-
- Remarks The difference between goto and gosub is that the return
- statement will return execution to the statement following the
- on statement..
-
- If the expression has a negative value or a value greater than
- n, no transfer takes place, and execution continues on the
- statement following the on statement.
-
- Example ! Talk to the player..
-
- :TALKHERE
-
- L9 = getstr( "Hello", "King", "Queen", "Treasure", "Key", "Door"
- );
-
- loadtext( player.text );
-
- if NOT dotext( s0 ) then ! The text record didn't handle the
- keyword..
-
- on L9 gosub XHELLO, XKING, XQUEEN, XGOLD, XKEY, XDOOR;
-
- endif;
-
- if S0 <> "Bye" goto TALKHERE;
-
- stop;
-
- See Also goto, gosub, if x goto, if x gosub, return
-
- Paint
-
- Syntax paint( { screen | window } );
-
- Purpose To re-paint either the entire screen or just the game
- playing window because the script has performed some actions
- that have probably erased all or part of the window.
-
- Remarks This statement is useful when you move the player of the
- screen by modifying it's x and y attributes.
-
- It is also a good idea after running a DOS program, or after
- you display a PCX graphics file on the screen.
-
- See Also viewpcx
-
- Pause
-
- Syntax pause( time );
-
- Purpose Pauses script execution until the user presses the space
- key or the specified time has elapsed.
-
- Parameters time
-
- This parameter is optional. It specifies a limit on the time
- that the command will wait. (In seconds). Any numeric
- expression that results in a number between 0 and 32000 seconds.
- A value of 0 means that no time limit is present. The user
- MUST press a key to continue. Note that pause(0); can also be
- written pause;.
-
- Remarks Used to wait for the user to read something on the
- screen or to see a graphics file that is being displayed,
-
- Examples ! Display a character's picture, then wait for 2
- minutes or until the
-
- ! player presses a key
-
- if player.picture > 0 then
-
- viewpcx( player );
-
- pause(120);
-
- paint(screen);
-
- endif;
-
- See Also wait
-
- Random
-
- Syntax ret-val = random( expr );
-
- Purpose Return a random number between 0 and expr-1.
-
- Parameters expr
-
- Is an arithmetic expression that results in a positive number
- larger than 1.
-
- Returns ret-val
-
- Is a value between 0 and expr-1.
-
- Remarks The expr is value is the number of alternatives you want
- to consider.
-
- Example ! 3 out of every 10 times, write a message
-
- if random( 10 ) < 3 then ! 0,1 and 2
-
- writeln( "We have a winner!" );
-
- endif;
-
- ! generate a monster of random size
-
- on random(5) gosub XTINY, XSMALL, XMEDIUM, XLARGE, XHUGE;
-
- ...
-
- ! Once out of every 7 times..
-
- if random(7) = 0 then ! or 1 or 2 or .. 6, but just one of them !
-
- gosub DOSOMETHING;
-
- endif;
-
- ReadText
-
- Syntax readtext( block# [, line#] ); or
-
- readtext( "filename" );
-
- Purpose To read and display some text on the screen
-
- Parameters block#
-
- Is the record number from the TEXT.DTA file.
-
- line#
-
- Is the line number within the block (1 to 16) or 0 (default)
- which means that the entire text record should be displayed.
-
- filename
-
- Is the name of a text file to be read and displayed.
-
- Remarks If block# is given, the record is read into variables S1
- through S16.
-
- If line# is non zero, only that line is displayed.
-
- The entire lines are displayed, the lines are not expected to
- contain keywords of any kind (unlike dotext)
-
- If a filename is provided, the screen is cleared and the text
- is displayed in full screen (but still graphics) mode. The
- paint command should be used to re-paint the screen after the
- text has been read. Also, the pause command may be used before
- the paint command to give a chance to the player to read the
- last page.
-
- The text file may contain some control commands that start with
- the % sign as follows:
-
- %MUSIC musicfile.cmf
-
- Plays the CMF format file musicfile in the background (The
- SoundBlaster SBFMDRV.COM must be memory resident).
-
- %VIEWPCX pcxfile.pcx
-
- Show the PCX graphics file on the screen in the resolution and
- with the pallete closest to the one specified in the PCX file
- that is available in the computer.
-
- %VPLAY vocfile.voc
-
- Plays the VOC format file on the foreground if a SoundBlaster
- card is present.
-
- %READ textfile
-
- The DOS text file is read through the SoundBlaster
- text-to-speach driver (SBTALKER) if installed.
-
- %PAGE
-
- Say "press <SPACE> to continue" and clear the screen when the
- player does press the space bar.
-
- %WAIT time
-
- Wait a maximum of time seconds or until all music and/or voice
- has finished playing. If the time expires before the music or
- voice is over, the music or voice is stopped. Also, if the user
- presses SPACE while waiting, the voice and music are stoped and
- the wait expires.
-
- Restart
-
- Syntax restart;
-
- Purpose Restart the game from the begining, but does not re-run
- the introduction or cause the player to have to re-create
- his/her character.
-
- Remarks From the DOS prompt, you can re-start the game by typing:
-
- C:\games> del sav*.*
-
- If you also want to re-create the playing party, type also:
-
- C:\games> del party.dta
-
- Restore
-
- Syntax restore( slot# );
-
- Purpose Restores the game to a previously saved possition.
-
- Parameters slot#
-
- The # of the saved game, which may be in the range 1 through 999.
-
- Remarks The restore command works by first deleting all files
- with name SAV*.000 from the current directory, and then copying
- all files of name SAV*.### (the saved game) to files names
- SAV*.000.
-
- The current game is held in slot # 0. Every time you transfer
- from one world to another, the current game is saved to slot 0.
- This means that if your game is interrupted for any reason (for
- example, you accidentaly press Ctrl-Alt-Del), your game state is
- restored to the time at which you entered the current world.
-
- See Also save, restart
-
- Return
-
- Syntax return;
-
- Purpose Returns execution control to the instruction following
- the last gosub that was executed.
-
- Remarks To write a subroutine, you declare a label (which will
- be used by the gosub statement to invoke it), followed by some
- script statements, followed by the return statement.
-
- Example ! Subroutine to move one step to the right.
-
- MOVERIGHT:
-
- if group.x < world.x-1 and world.density <= VERY_ROUGH then
-
- inc(group.x);
-
- endif;
-
- return;
-
- Save
-
- Syntax save( slot# );
-
- Purpose Saves the current game in the given slot.
-
- Parameters slot#
-
- The slot to be used to save the game. May be in the range 1
- through 999.
-
- Remarks The save command works by first saving to slot 0 and
- then copying all files with name SAV*.000 to files of name
- SAV*.###.
-
- The current game is held in slot # 0. Every time you transfer
- from one world to another, the current game is saved to slot 0.
- This means that if your game is interrupted for any reason (for
- example, you accidentaly press Ctrl-Alt-Del), your game state is
- restored to the time at which you last entered the current world.
-
- See Also restore, restart
-
- SavePCX
-
- Syntax savepcx( "fname.pcx" );
-
- Purpose Saves the screen as a PCX format graphics file to the
- given filename.
-
- Parameters "fname.pcx"
-
- A string constant containing a valid DOS filename.
-
- Remarks The system does not check to make sure the filename is a
- valid DOS filename, nor does it add the .PCX extension if it is
- not provided.
-
- If the file already exists, it is overwritten.
-
- Example ! Save the current screen
-
- savepcx( "scrndump.pcx" );
-
- See Also viewpcx
-
- Select
-
- Syntax retval = select ( group );1
-
- retval = select [$[2]] ( {player|npc} [, {matching|type}] );2
-
- retval = select [$[2]] ( {player.body|npc.body} );3
-
- retval = select [$] ( string [, value] [, string ... ] );4
-
- Purpose Display a list of characters, items, etc, on the menu
- area, and then allow the player to select one of the displayed
- items. The item selected becomes the current generic item of the
- appropriate type.
-
- Parameters group, player, npc, player.body and npc.body
-
- Tells the select command what you want to select from.
-
- matching
-
- Used to indicate that only items that match the items of the
- type carried by the current npc should be displayed.
-
- type
-
- is a number or token with a value between 0 and 255.
-
- string
-
- is a text string enclosed in quotes.
-
- value
-
- is either a number (constant or token) or a single variable or
- attribute whose value is numeric. No arithmetic expressions are
- permited.
-
- Returns The number that returns is the index to the selected
- item.
-
- Remarks If a $ is specified, then values will be displayed as
- gold or silver pieces (1gp = 10sp). The 2 following the $
- indicates that the values should be divided by 2 before being
- displayed.
-
-
-
- 1) Select a member of the playing party. The selected member
- (if any) becomes the current player.
-
-
-
- 2) Select one of the items in the character's backpack. If
- matching is specified, only items that match the type of items
- in the current npc's backpack will be displayed. If type is
- provided, only items of the specified type are displayed. The
- selected item becomes the character's current .bp item.
-
-
-
- 3) Select one of the items being worn by the current character.
- The item selected becomes the current player.body item. If the
- character is not wearing any items (weapon, armor, shield, ring,
- amulet or staff), no menu is displayed and the function return a
- -1.
-
-
-
- 4) Displays a menu with the options listed (strings), and allows
- the player to select one of them. It returns the index to the
- selected one. The first item is 0.
-
- If no item is selected (player pressed <ESC> key) the function
- returns -1.
-
- If the list is empty (no item is being carried in the backpack
- or being worn), the function also returns -1.
-
- Examples ! Select the current spokes-person...
-
- L3 = select( group );
-
- ! Show list of potions being carried and give it to the npc
-
- L8 = display( player, POTION );
-
- If L8 >= 0 then
-
- move( player.bp, npc );
-
- endif;
-
- ! A merchant offers to sell something.
-
- L39 = select$( npc );
-
- if L39 >= 0 then
-
- if group.gold >= npc.bp.value then
-
- writeln( "Sold ", npc.bp.count, " ", npc.bp.name );
-
- copy( npc.bp, player );
-
- if failure then
-
- writeln( "I'll just put it here on the floor.." );
-
- drop( npc.bp );
-
- endif;
-
- dec( group.gold, npc.bp.value );
-
- else
-
- writeln( "You don't have enough money!" );
-
- endif;
-
- else
-
- writeln( "Ok.." );
-
- endif;
-
- ! Display the player's items that the merchant might want to
- buy.
-
- L39 = select$2( player, matching );
-
- if L39 >= 0 then
-
- writleln( "Here is ", $player.bp.value," for your
- ",player.bp.name);
-
- inc( group.gold, player.bp.value / 2 );
-
- move( player.bp, npc );
-
- endif;
-
- ! Give the player a choice and take the appropriate action..
-
- :XAGAIN
-
- on select("Yes", "No","Maybe") goto XYES, XNO, XMAYBE;
-
- goto XNONE;
-
- :XYES
-
- writeln( "Good stuff..." );
-
- goto SOMEWHERE;
-
- :XNO
-
- writeln("Too bad..." );
-
- goto SOMEWHERE;
-
- :MAYBE
-
- writeln( "Will you make up your mind?" );
-
- goto XAGAIN;
-
- :SOMEWHERE
-
- ! Now do something else..
-
- See Also display
-
- SetBody
-
- Syntax setbody( which, type );
-
- Purpose Select the worn item represented by the generic variable
- player.body or npc.body.
-
- Parameters which
-
- Is one of the npc or player attributes .body, .weapon, .armor,
- .shield, .ring, .amulet or .staff.
-
- type
-
- Is an expression that evaluates to one of the six relevant types
- (represented by tokens WEAPON, ARMOR, SHIELD, RING, AMULET or
- STAFF). Any other value is invalid.
-
- Remarks When specifying npc.body or player.body, the type is
- required.
-
- When specifying npc.weapon, npc.armor, etc, the type is
- invalid, since it is implied by the attribute itself.
-
- SetBp
-
- Syntax setbp( which, expr );
-
- Purpose Select the backpack item represented by the generic
- variable player.bp or npc.bp.
-
- Parameters which
-
- Is one of npc.bp or player.bp, to identify which backpack you
- want to set.
-
- expr
-
- Is an expression resulting in a number between 0 and 15, which
- indicates the position within the backpack that is to be
- represented by the generic variable.
-
- Remarks The backpack position may be empty (i.e. not contain a
- valid item).
-
- You can tell if an item is present by testing the count
- attribute. A value of zero always implies that the item does
- not exist.
-
- Sgn
-
- Syntax ret-val = sgn( expr );
-
- Purpose To determine whether an expression is negative, positive
- or zero.
-
- Parameters expr
-
- A single expression whose numeric value may be negative,
- positive or exactly zero.
-
- Returns Returns -1 (minus one) if the expression is negative, +1
- (plus one) if the expression is positive and 0 (zero) if the
- expression is exactly zero.
-
- Remarks This function may be useful when it is not important to
- know the magnitude of the difference between two values, but
- just whether one of them is greater than the other.
-
- Examples ! The character is about to hit the npc. The npc has a
- 1 in 4 chance of
-
- ! blocking the attack (25%), but it may be modified to 1 in 3 if
- the npc has
-
- ! a higher dexterity than the player, or to 1 in 5 if the player
- has the better
-
- ! dexterity.
-
- L7 = 4 + sgn( player.dex - npc.dex );
-
- ! Another version of the above computes an adjustment based on
- the
-
- ! player's AND npc's dexterity using the adjustments function,
- and adds
-
- ! or substracts the adjustment based on who is better. This
- means that
-
- ! A high player dexterity OR a low npc dexterity will decrease
- the ability
-
- ! of the npc to block the attack.
-
- L7 = 4 + sgn(player.dex-npc.dex) *
- adjustments(player.dex,npc.dex);
-
- Sound
-
- Syntax sound = boolean-value
-
- if sound then ...
-
- Purpose If this variable has a non-zero value, sounds are
- enabled. It is enabled by default, unless you use the -S run
- time argument. You can change the value any time you want to
- enable/disable sound.
-
- Remarks If you don't have a sound card, sound can still be
- played through the PC speaker if you convert the voices using
- the VOC2PWM and PACK utility.
-
- Example sound = not sound; ! Turn sound on and off
-
- Stats
-
- Syntax stats; or stats ( [ player|npc, ] who );
-
- Purpose Tells the system to display character statistics in the
- menu area, if they are not currently being displayed.
-
- Parameters player|npc
-
- Specifies whether you want to display a player's statistics or
- an NPCs statistics. Note: During a fight, the npcs are the
- monsters you are fighting with. The default is player.
-
- who
-
- Is the index of the player (or npc) whose statistics you want to
- display. If you want to display stats on the current player use
- group.current or player.index (same thing) or use npc.index for
- the current npc.
-
- Remarks Statistics are displayed more or less automaticly, but
- during the execution of a script, you can use the menu area for
- other things. If you want to restore the statistics at any time,
- you may use the stats function.
-
- If you omit the parameter (stats;), the group summary
- statistics are displayed.
-
- If you specify a who of -1, the system will re-display the
- statistics we were already showing. This is useful when the
- menu area has been used for something else, like the display
- command.
-
- Example ! Refresh the statistics area
-
- stats(-1);
-
- ! Display the current player's detailed statistics
-
- stats( group.current );Stop
-
- Syntax stop;
-
- Purpose Terminates execution of the script.
-
- Remarks Indicates that the script has performed all required
- actions.
-
- See Also continue, fight
-
- Success
-
- Syntax ret-val = success;
-
- Purpose To find out if the last major operation was successful.
-
- Returns ret-val
-
- The returns will be non-zero (TRUE) if the last major operation
- completed successfuly.
-
- Example ! A merchant sells an item to a player..
-
- writeln( "Here is your ", npc.bp.name );
-
- copy( npc.bp, player.bp );
-
- if success then
-
- writeln( "Sold!" );
-
- else
-
- writeln( "The ", npc.bp.name, " is placed on the floor.." );
-
- drop( npc.bp );
-
- endif;
-
- See Also failure
-
- System
-
- Syntax system( argument1 [ , argument2 ... ] );
-
- Purpose Execute a DOS command.
-
- Parameters argumentN
-
- Is a a string constant, variable or attribute, or a numeric
- constant, token, variable or attribute. No expressions are
- allowed.
-
- Remarks The system command will create a single string by
- concatenating the values of the arguments in very much the same
- way that the writeln command does. The resulting string is
- assumed to be a DOS command that needs to be executed.
-
- If the numeric attributes type or class are displayed, the
- associated string listed in the token file (DCCTOKEN.DAT) is
- used, instead of the numeric value.
-
- If a numeric argument is preceeded by a $ sign, the value is
- represented in gold or silver pieces.
-
- The failure will be set to the value returned by the DOS
- command. The value can be tested for non-zero (i.e. just a
- failure) or for it's numeric value, which can have any meaning
- that the DOS command chose to give that value.
-
- Examples ! Assuming you have a CASINO game that receives as
- parameters the
-
- ! name of the player and the amount of money to start with:
-
- system( "CASINO ", player.name, " ", group.gold / 10 );
-
- group.gold = failure * 10; ! Earnings stored in the return value
-
- ! The following examples are for save/restore using a DOS
- program..
-
- save(0); ! Save current game
-
- system( "MYSAVE SAVE" ); ! Store it somewhere
-
- ! or:
-
- system( "MYSAVE RESTORE" );! Retrieve a saved game to slot 0
-
- restore(0); ! Cause the system to re-load slot 0.
-
- ! or:
-
- group.current = 0;
-
- inc( player.v7 );
-
- save(0);
-
- system( "pkzip.exe ", player.v7, " SAV*.000 " );
-
- Teleport
-
- Syntax teleport( dest_world [, dest_door] );
-
- teleport( dest_world, dest_x, dest_y );
-
- Purpose When the current script finishes execution, the party
- will be transfered to the given world at the location indicated
- by the given door.
-
- Parameters dest_world
-
- Is the index number of the destination world (0-999)
-
- dest_door
-
- Is the door in the destination world, over which the party will
- be placed. The default is door 0.
-
- dest_x, dest_y
-
- The coordinates in the destination world at which the party will
- be placed (No door is needed).
-
- Remarks Unlike the enter command, no door leading from the
- current world to the destination world is used. The transfer is
- made directly to the world and location indicated.
-
- Examples ! Transfer the party to one of 3 worlds at random
-
- L3 = random(3);
-
- if L3 = 0 then
-
- teleport( 38 ); ! Teleport to world 38, door 0
-
- elsif L3 = 1 then
-
- teleport( 5, random(2) ); ! Teleport to world 5, door 0 or 1
- (random)
-
- else
-
- teleport( 43, 25, 32 ); ! Teleport to world 43,
- location X=25, Y=32
-
- endif;
-
- See Also enter
-
- Vanish
-
- Syntax vanish( object );
-
- Purpose Destroy an object
-
- Parameters object
-
- Is the object to be destroyed. It can be any of the following:
- player.bp, player.body, player.weapon, player.shield,
- player.armor, player.ring, player.amulet, player.staff, npc.bp,
- npc.body, npc.weapon, npc.shield, npc.armor, npc.ring,
- npc.amulet, npc.staff, object, curritem or group.vehicle.
-
- Remarks The object is removed and will no longer be available
- anywhere.
-
- This is exactly equivalent to setting the count attribute of
- the object to 0, which in effect means that the object is no
- longer there.
-
- Example !
-
- ! Destroy a staff after it has no charges left..
-
- if staff.charges > 1 then
-
- dec( staff.charges );
-
- else
-
- writeln( "The ", staff.name, " flashes and disappears.." );
-
- vanish( staff );
-
- ! Note that staff.count = 0 has the same effect !
-
- endif;
-
-
-
- See Also drop, move, copy
-
- Version
-
- Syntax ret-val = version;
-
- Purpose Determine the current version of the DCGAMES software
- being used to run the adventure.
-
- Returns The version of the game driver in use.
-
- Remarks The version number is in the hundreds. Version 3.00 is
- returned as 300 (three hundred). Version 3.01 would be returned
- as 301 (three hundred and one). The current version as of August
- 1995 is 4.00 (or 400).
-
- Example if version < 400 then
-
- writeln( "ACK! You are using an old (incompatibile) driver!!"
- );
-
- stop;
-
- endif;
-
- ViewFLI
-
- Syntax viewfli( "filename.fli" [, framedelay] );
-
- Purpose Play a FLI (or FLC) animation on the screen
-
- Parameters "filename.fli"
-
- Is a quoted string which contains name of the FLI or FLC file to
- be played. The filename is used exactly as given. (i.e. an
- extension of .FLI or .FLC is NOT automaticly added).
-
- framedelay
-
- Allows you to override the delay between frames when playing
- back the flic. It is specified in units which occur 18.2 times
- per second, so if you want to delay 2 seconds between each
- frame, the framedelay would be specified as 36 (closest number
- to 36.4). If not specified, the system plays the FLI according
- to the information in the file itself.
-
- Remarks This routine only works in 256 color modes. Thus, if you
- are running in VHI resolution (a 16 color mode), the system will
- try to play it in VLO mode.
-
- If the movie fits within the world window, it will be played in
- that area. If it doesn't, but it fits within the screen, the
- screen will be cleared to play it.
-
- The system will re-build call PAINT(WINDOW) or PAINT(SCREEN) as
- needed before returning to the script.
-
- See Also viewpcx
-
- ViewPCX
-
- Syntax viewpcx( character ); or
-
- viewpcx( object ); or
-
- viewpcx( world ); or
-
- viewpcx( "filename.pcx" );
-
- Purpose Display a PCX graphics file on the screen
-
- Parameters character
-
- If you specify player or npc, the characters picture attribute
- will be used to create a filename of the form CPICT###.PCX,
- where ### is the numeric value of the picture attribute.
-
- object
-
- If you specify an object (object, curritem, player.bp, etc..)
- then the object's picture attribute will be used to create a
- filename of the form OPICT###.PCX, where ### is the numeric
- value of the picture attribute.
-
- world
-
- If you specify world, the index attribute of the world (i.e the
- world's number) will be used to create a filename of the form
- WORLD###.PCX, where ### is the world's index value.
-
- "filename.pcx"
-
- Is a quoted string which contains a valid DOS filename. The
- filename is used exactly as given. (i.e. an extension of .PCX is
- NOT automaticly added).
-
- Remarks Warning: After the image is displayed, control returns
- to the script leaving the image displayed on the screen. It is
- up to the script writter to decide when the screen should be
- re-freshed by calling the PAINT function.
-
- Note also that you can call PAINT(WINDOW) or PAINT(SCREEN)
- depending on whether the image you displayed fits within the
- world view window or whether the whole screen is required.
-
- See Also paint
-
- Voice
-
- Syntax voice( "keyword" , rsc );
-
- Purpose Play back a voice recording.
-
- Parameters keyword
-
- The keyword is a one 1 to 8 character word that identifies the
- voice recording stored in a voice resource file.
-
- rsc
-
- Is the number of the voice resource file (VOICEnnn.RSC) that
- contains the voice you want to play. The value must be in the
- range 0 to 999 with two exceptions: A value of 1000 indicates
- that the system sounds file DCSOUNDS.RSC should be used; and a
- value of -1 is ignored and no sound is played. This parameter
- is no longer optional!
-
- Remarks Previous versions of DCGAMES (3.x) would use the
- npc.voice attribute as the default voice, but that is no longer
- supported because you can now do a lot more interaction between
- npcs and players.
-
- Since a -1 is allowed and indicates that no sound should be
- played, you don't have to check the npc.voice or player.voice
- attribute when you invoke voice. If none is given, nothing
- happens!
-
- Examples ! The character tried to open a chest and it was
- trapped..
-
- if rand(3) = 0 then ! Trap
-
- voice( "Explode", 1000 ); ! System Sound !
-
- writeln( "Argh..." );
-
- endif;
-
- ! Talking to a character
-
- :XTALK
-
- L0 = getstr( "Hello", "Bye", "Job", "Name", ... );
-
- if L0 >= 0 then
-
- voice( s0, npc.voice );
-
- on L0 goto XHELLO, XBYE, XJOB, XNAME,...;
-
- endif;
-
- writeln( "Beg Pardon?" );
-
- goto :XTALK
-
- See Also dotext, vplay, music
-
- VPlay
-
- Syntax vplay( "voicefile.voc" );
-
- Purpose Play back a voice recording file.
-
- Parameters voicefile.voc
-
- The file voicefile.voc is loaded and played through the
- SoundBlastertm if it is present.
-
- Remarks Only the SoundBlaster series of audio cards is supported
- at this time.
-
- The file must be stored in the .VOC format, must be shorter
- than 64K and must fit in available memory.
-
- See Also dotext, voice, music
-
- Wait
-
- Syntax wait( time );
-
- Purpose Wait until all voice and music has finished playing, or
- time seconds have passed.
-
- Parameters time
-
- The maximum number of seconds to wait. May be in the range 0 to
- 32000.
-
- Remarks A time of 0 indicates that there is no time limit. If
- no music is present, this is equivalent to pause(0); The wait
- ends when either no more voice or music is playing, the user
- pressed the SPACE bar or the specified time has elapsed.
-
- If the time limit is reached or the player presses a key, the
- music and voice still playing is stoped.
-
- Example ! Play some Background music
-
- music( "overture.cmf" ); ! Start playing music
-
- viewpcx( "map.pcx" ); ! Display a picture on the screen
-
- wait(0); ! Wait until the music ends or SPACE bar
-
- paint( SCREEN ); ! re-paint the screen.
-
- See Also pause, music, voice, vplay, viewpcx, dotext, paint
-
- While
-
- Syntax while expr do statements; endwhile;
-
- Purpose Execute a set of statements as long as the expression is
- non-zero
-
- Parameters expr
-
- Is a logical expression which results in a numeric value.
-
- Remarks The expression expr is evaluated and the statements are
- executed until the expression results in a value of zero.
-
- Examples ! Ask a question, demand an answer.
-
- writeln( "Do you agree? (Yes/No)" );
-
- L3 = getstr( "yes", "no" );
-
- while L3 < 0 do
-
- writeln( "You must say Yes or No" );
-
- L3 = getstr( "yes", "no" );
-
- endwhile;
-
- Write[ln]
-
- Syntax write( argument [ , argument ... ] );
-
- writeln[( argument [, argument] )];
-
- Purpose Display a line of text on the text area of the screen.
-
- Parameters argument
-
- Is a a string constant, variable or attribute, or a numeric
- constant, token, variable or attribute. No expressions are
- allowed.
-
- Remarks The write command is used to indicate that subsequent
- write or writeln commands will continue writing on the same line
- as this one, unless the line is full.
-
- The writeln command indicates that subsequent write or writeln
- commands will start writing on a new line.
-
- If the numeric attributes type or class are displayed, the
- associated string listed in the token file (DCCTOKEN.DAT) is
- displayed, instead of the numeric value.
-
- If a numeric argument is preceeded by a $ sign, it is displayed
- in gold/silver pieces.
-
- Examples ! The following command
-
- writeln( "Sold ", L7, " ", npc.bp.name, " at ", $npc.bp.value
- );
-
- ! might display
-
- Sold 5 Pumkin Pies for 3gp
-
- ! if npc.bp.name = "Pumkin Pies" and npc.bp.value = 30
-
- ! The following command
-
- write( "You see a ", object.name, " (", object.type, ")" );
-
- if object.type = WEAPON and object.hands = 2 then
-
- writeln( " (Two-Handed) " );
-
- else
-
- writeln; ! End the line..
-
- endif;
-
- ! might display
-
- You see a Rusty Knife (Weapon)
-